package wenjun.du.androidart.window

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.activity_window.*
import wenjun.du.androidart.R

/**
 *
 * window: 是一个抽象的概念，表示展示在界面上的
 *  具体实现是PhoneWindow 呈现方式是view
 *
 *  涉及到有：windowManager(addView、updateView和removeView) windowManagerImpl WindowManagerGlobal
 *
 *  window是有层级的，和html的z-index属性一样 层级越高 显示在越上层，
 *  window可以分为应用window(1~99)、子window(1000~1999)、系统window(2000~2999)
 *
 * 源码理解：
 * 应用window的创建过程：activity界面的添加过程   windowLayoutParams type == WindowManager.LayoutParams.TYPE_BASE_APPLICATION
 * 子window的创建过程：dialog界面的添加过程   windowLayoutParams type == WindowManager.LayoutParams.TYPE_APPLICATION
 * 系统window的创建过程:Toast的展示          windowLayoutParams type == WindowManager.LayoutParams.TYPE_TOAST
 *
 * */
class WindowActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_window)

        window_activity.setOnClickListener {
            //创建activity (ActivityThread.handleResumeActivity())
        }

        window_dialog.setOnClickListener {
            // dialog的创建流程
            val builder = AlertDialog.Builder(this)
            builder.apply {
                setTitle("title")
                setMessage("message")
                setNegativeButton(
                    "取消"
                ) { dialog, _ -> dialog.dismiss() }
                setPositiveButton("确定") { dialog, _ -> dialog.dismiss() }
                create()
                show()
            }
        }

        window_toast.setOnClickListener {
            Toast.makeText(this, " 我是一个Toast ", Toast.LENGTH_SHORT).show()
        }
    }
}